#!/usr/bin/python -OO
# -*- coding: utf-8 -*-
#
# Ubuntu Easy Setuper 是为您的 Ubuntu 消除BUG、装软件的工具。
# 部分安装过程是自动化的，不需要按键或点鼠标。
# 安装的软件大部分不在Ubuntu源里，并非用 sudo apt-get install 就能简单装上的。
# 本工具节省您自行下载软件再手动安装的精力和时间。
# 本工具修复了防火墙不启动的BUG、pdf打印机不能用的BUG、SCIM出错的BUG、Netbeans不能启动J2ME程序等等BUG
# 交大的同学可以用 mplayer 看 comic 。
#
# 使用它之后，您可以用 Ubuntu：
# ★用 Latex 写中文论文
# ★看Flash视频；
# ★用 MSN、QQ
# ★阅读 RSS 新闻
# ★用 Eclipse 和 Netbeans 写多种语言的程序 C(++) Java Ruby Python PHP
# ★使用Intel编译器、Intel数学库
#
# Ubuntu Easy Setuper 装的软件都是最新版本。
#
# 这个软件是安全的。
# 您不用担心这个工具偷偷摸摸给您的电脑上放个木马，因为您能阅读、修改全部源代码；
# 您也不用担心给您装的软件里有机关，因为您能用自己找的软件包替换本工具装的软件包。
#
# Copyright © 2008,2009 Trust Digital Technology Laboratory, Shanghai Jiao Tong University.
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice (including the next
# paragraph) shall be included in all copies or substantial portions of the
# Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
# Author:
#   XING Dong sheng <homer.xing@gmail.com>

from __future__ import with_statement
import softwareindependent as I
import softwaredependent as D
import os, sys

def welcome():
	print """Ubuntu Easy Setuper 是为您的 Ubuntu 消除BUG、装软件的工具。
部分安装过程是自动化的，不需要按键或点鼠标。
安装的软件大部分不在Ubuntu源里，并非用 sudo apt-get install 就能简单装上的。
本工具节省您自行下载软件再手动安装的精力和时间。
本工具修复了防火墙不启动的BUG、pdf打印机不能用的BUG、SCIM出错的BUG、Netbeans不能启动J2ME程序等等BUG

有这些组软件可装：

基本(B) Linux内核2.6.30 中文语言包 防火墙 多媒体解码器 Flash视频支持
常用(C) Adobe_Reader 辞典 Pidgin(支持MSN) RSS阅读器 Mplayer媒体播放器
编程(P) Vim SUN_JDK Eclipse Netbeans KScope Intel编译器_数学核心库_线程构造模块
Latex(L) Texlive
虚拟机(V) VirtualBox
"""

def getuserchoice():
	print """您想安装哪些组呢？请输入组代号。如输入 BCP 表示 基本+常用+编程。默认全部安装。"""
	cont = True
	while cont:
		D.choice = raw_input("(B)基本 (C)常用 (P)编程 (L)Latex (V)虚拟机: ").strip().upper()
		if D.choice=="": D.choice="BCPLV"; break
		cont = False
		for c in D.choice:
			if not (c in "BCPLV"):
				cont = True; break

def aptgetupdate():
	#FIXME: 检查/etc/apt/sources.list 是否正确
	if not D.execute("sudo apt-get update"):
		I.notify("Ubuntu Easy Setuper 说：",
"我不能更新软件包列表。是不是您打开了“新立得软件包管理器”？")
		sys.exit(0)

def nointeractive():
	from installbasic import installbasic
	from installcommonuse import installcommonuse
	from installlatex import installlatex
	from installprogrammingtool import installprogrammingtool

	if D.execute("sudo apt-get upgrade -y"):
		if D.execute("sudo apt-get dist-upgrade -y"):
			D.clean()
			
			if 'B' in D.choice:
				installbasic()
				D.clean()
			
			if 'C' in D.choice:
				installcommonuse()
				D.clean()
			
			if 'P' in D.choice:
				installprogrammingtool()
				D.clean()
			
			if 'L' in D.choice:
				installlatex()
				D.clean()
				
def stuff():
	from needinteractive import needinteractive

	if I.isinsudo():
	  I.notify('安全考虑！',"请您不要用 sudo ./easysetuper.py 运行我。\n建议用非root身份，用 ./easysetuper.py 运行我。")
	  sys.exit(0)
	welcome()
	getuserchoice()
	if D.needsetaptsource():
		D.setaptsource()
	aptgetupdate()
	needinteractive()
	I.notify('Ubuntu Easy Setuper 说：','接下来的安装我自动完成，您不用照顾我了 :)')

	nointeractive()
	D.clean()
	I.notify('Ubuntu Easy Setuper 说：','Oh Yeah, 都安装好了。不过有的功能您重启动电脑以后才能用 :) Bye Bye~')

t=I.T()
try:
	t.on()
	t.start()
	stuff()
finally:
	t.die()
